import java.util.ArrayList;

public class Destroy extends Map {
	/**
	 *
	 */
	private static final long serialVersionUID = 1L;


	ArrayList<DestroyBlock> destroy = new ArrayList<DestroyBlock>();

	private static final int tate = 0;
	private static final int yoko = 1;

	int m = 0;
	Map panel;

	public Destroy(Map panel) {
		this.panel = panel;
		checkBlock(panel.map);
	}

	public int resetFlag() {
		return 1;
	}

/*
 * どこが揃っているか判定
 */
	public void checkBlock(int[][] map) {
		int flag = resetFlag();

		for (int i = 0; i < 8; i++) {
			if(map == null){
				break;
			}
			for (int j = 0; j < 7; j++){
				if(map[i][j]==7){
					panel.isExist_7 = true;
					continue;
				}
				if (map[i][j] == map[i][j + 1]){
					flag++;
				}else{
					createDestroyBlock(i, j, flag, tate);
					flag = resetFlag();
				}
			}
			createDestroyBlock(i, 7, flag, tate);
			flag = resetFlag();
		}
		for (int j = 0; j < 8; j++) {
			if(map == null){
				break;
			}
			for (int i = 0; i < 7; i++) {
				if(map[i][j] == 7){
					panel.isExist_7 = true;
					continue;
				}
				if(map[i][j] == map[i + 1][j]){
					flag++;

				}else{
					createDestroyBlock(i, j, flag, yoko);
					flag = resetFlag();
				}
			}
			createDestroyBlock(7, j, flag, yoko);
			flag = resetFlag();
		}
	}

/*
 * 初めのx,y座標と長さと向きの情報から
 * destroyblockに消すブロックの情報を一つづつ保持させる
 */
	public void createDestroyBlock(int x, int y, int leng, int direc) {
		if (leng >= 3) {
			for(int i = 0; i < leng; i++){
				if(direc == tate)
					destroy.add(new DestroyBlock(x, y-i));
				if(direc == yoko)
					destroy.add(new DestroyBlock(x-i, y));
			}
		}
	}
	/*
	 * ブロックの情報を取り出す
	 * （注）一度ブロックを取り出したら消える
	 */
	public DestroyBlock getDestroyBlock(){
		return destroy.remove(destroy.size()-1);
	}
	/*
	 * 消すブロックが存在するか
	 */
	public boolean isExistance(){
		return destroy.size() > 0;
	}
}
